package br.com.montezuma.empresarial.controller;
import java.util.List;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.montezuma.empresarial.backend.CargoDAO;
import br.com.montezuma.empresarial.backend.ContatoDAO;
import br.com.montezuma.empresarial.backend.EmpresaDAO;
import br.com.montezuma.empresarial.backend.TipoContratoDao;
import br.com.montezuma.empresarial.models.AtividadeEmpresarial;
import br.com.montezuma.empresarial.models.Cargo;
import br.com.montezuma.empresarial.models.Contato;
import br.com.montezuma.empresarial.models.Empresa;
import br.com.montezuma.empresarial.models.IListagem;
import br.com.montezuma.empresarial.models.TipoContrato;
import br.com.montezuma.empresarial.utils.Container;
import br.com.montezuma.empresarial.utils.Filtro;
import br.com.montezuma.empresarial.utils.Util;

/**
 * <pre>
 * @author : Vitor Barroso
 * Purpose :ContatoController, providing operations for Contato.
 * Amendment History                                                                
 * Date -                            
 * 27/05/2012 - Vitor Barroso - initial version.
 * 
 * Copyright 2012 Montezuma Software
 * </pre>
 */
@Resource
public class ContatoController extends AbstractController<Contato, ContatoDAO>{
	
	private CargoDAO cargoDAO;
	private EmpresaDAO empresaDAO;

	public ContatoController(Result result, ContatoDAO contatoDao,Validator validator,CargoDAO cargoDAO, EmpresaDAO empresaDAO) {
		super(result, contatoDao, validator);
		this.cargoDAO = cargoDAO;
		this.empresaDAO = empresaDAO;
	}
	
	
	protected void valide(Contato contato){
		if(Util.isEmpty(contato.getNome())){
			getValidator().add(new ValidationMessage(
					"O Nome deve ser informado", "contato.nome"));
		}
		if(Util.isEmpty(contato.getCpf())){
			getValidator().add(new ValidationMessage(
					"O CPF deve ser informado", "contato.cpf"));
		}
		if(Util.isEmpty(contato.getCargo())){
			getValidator().add(new ValidationMessage(
					"O Cargo deve ser informado", "contato.cargo"));
		}
		if(Util.isEmpty(contato.getEmpresa())){
			getValidator().add(new ValidationMessage(
					"A Empresa deve ser informada", "contato.empresa"));
		}
		
		if (Util.isEmpty(contato.getEmail())) {
			getValidator().add(new ValidationMessage(
					"O E-mail deve ser informado", "contato.email"));
		}
		if(Util.isEmpty(contato.getTelefone())){
			getValidator().add(new ValidationMessage(
					"O Telefone deve ser informado", "contato.telefone"));
		}
		
	}
	
	
	
	/* (non-Javadoc)
	 * @see br.com.montezuma.empresarial.controller.AbstractController#salvar(java.lang.Object)
	 */
	@Override
	public void salvar(Contato model) {
		Long cargoId = model.getCargo().getId();
		Long empresaId = model.getEmpresa().getId();
		
		this.empresaDAO.open();
		model.setEmpresa(this.empresaDAO.findById(empresaId));
		this.empresaDAO.close();
		
		this.cargoDAO.open();
		model.setCargo(this.cargoDAO.findById(cargoId));
		this.cargoDAO.close();
		super.salvar(model);
	}


	/* (non-Javadoc)
	 * @see br.com.montezuma.empresarial.controller.AbstractController#executeDominios()
	 */
	@Override
	protected void executeDominios() {
		this.empresaDAO.open();
		List<Empresa> empresas = empresaDAO.findAll();
		this.empresaDAO.close();
		
		this.cargoDAO.open();
		List<Cargo> cargos = this.cargoDAO.findAll();
		this.cargoDAO.close();
				
		getResult().include("cargos", cargos);
		getResult().include("empresas", empresas);
	}

}